#! /usr/bin/env python
# -*- coding: utf-8 -*-
# 爬取百科信息
import string
import sys
import json
import urllib

from bs4 import BeautifulSoup
import requests
from urllib.parse import quote
import re


# 打开网页，获取网页内容
def url_open(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36', }
    res = requests.get(url, headers=headers)
    res.encoding = 'utf-8'
    return res.text


# 诗人列表
def listPoet(filename):
    data = []
    fr = open(filename, 'r')
    lines = fr.readlines()
    for line in lines:
        data.append(line.split(' '))
    fr.close()
    return data


if __name__ == '__main__':
    poets = listPoet('../../Downloads/poet_baike/poetlist.txt')[0]
    result_data = []
    for poetname in poets:
        url = "https://baike.baidu.com/item/" + poetname
        url = quote(url, safe=string.printable)
        data = url_open(url)
        soup = BeautifulSoup(data, 'html.parser')
        name_data = []
        value_data = []
        # 诗人简介
        intro = soup.find('div', class_='lemma-summary').get_text()
        # 诗人所有信息
        poetalldata = soup.find('div', class_="main-content").get_text().replace('    ', '').replace('\n', '').replace(
            '编辑', '')

        # 诗人基本信息
        name_node = soup.find_all('dt', class_="basicInfo-item name")
        for i in range(len(name_node)):
            name_data.append(name_node[i].get_text().replace('    ', ''))
        value_node = soup.find_all('dd', class_="basicInfo-item value")
        for i in range(len(value_node)):
            value_data.append(value_node[i].get_text().replace('\n', ''))

        result = {'本名': '无信息', '别称': '无信息', '字': '无信息', '号': '无信息', '所处时代': '无信息', '民族族群': '无信息',
                  '出生时间': '无信息', '去世时间': '无信息', '主要作品': '无信息', '人物生平': '无信息', '主要成就': '无信息',
                  '文学特点': '无信息', '人物评价': '无信息', '轶事典故': '无信息', '亲属成员': '无信息', '后世影响': '无信息', '人物争议': '无信息',
                  '后世纪念': '无信息', '艺术形象': '无信息'}
        hao = '号'
        for i in range(len(name_data)):
            if (name_data[i] == '本名') or (name_data[i] == '中文名'):
                result['本名'] = value_data[i]
            # if name_data[i] in ['', '外文名']:
            #     result['英文名'] = value_data[i]
            if name_data[i] == '字号':
                if hao in value_data[i]:
                    result['字'] = value_data[i].split('号', 1)[0]
                    result['号'] = value_data[i].split('号', 1)[1]
                else:
                    result['字'] = value_data[i]
            if name_data[i] == '所处时代' or name_data[i] == '国籍':
                result['所处时代'] = value_data[i]
            if name_data[i] == '出生时间' or name_data[i] == '出生日期':
                result['出生时间'] = value_data[i]
            if name_data[i] == '去世时间' or name_data[i] == '逝世日期':
                result['去世时间'] = value_data[i]
            if name_data[i] == '主要作品' or name_data[i] == '代表作品':
                result['主要作品'] = value_data[i]

        # 诗人拓展信息
        splitwords = ['人物生平', '个人生平', '生平经历', '主要成就', '文学特点', ' 文学成就', '人物评价', '历史评价', '轶事典故', '家庭成员', '家族成员', '亲属成员',
                      '后世影响', '人物争议', '后世纪念', '艺术形象']
        for i in range(len(splitwords)):
            poetalldata = poetalldata.replace(splitwords[i], '||' + splitwords[i] + ":")
        poet_data = poetalldata.split("||")
        for i in range(len(poet_data)):
            if '人物生平' in poet_data[i] or '个人生平' in poet_data[i] or '生平经历' in poet_data[i]:
                result['人物生平'] = poet_data[i]
            if '主要成就' in poet_data[i] or '文学成就' in poet_data[i]:
                result['主要成就'] = poet_data[i]
            if '文学特点' in poet_data[i]:
                result['文学特点'] = poet_data[i]
            if '人物评价' in poet_data[i] or '历史评价' in poet_data[i]:
                result['人物评价'] = poet_data[i]
            if '轶事典故' in poet_data[i]:
                result['轶事典故'] = poet_data[i]
            if '家庭成员' in poet_data[i] or '家族成员' in poet_data[i] or '亲属成员' in poet_data[i]:
                result['亲属成员'] = poet_data[i]
            if '后世影响' in poet_data[i]:
                result['后世影响'] = poet_data[i]
            if '人物争议' in poet_data[i]:
                result['人物争议'] = poet_data[i]
            if '后世纪念' in poet_data[i]:
                result['后世纪念'] = poet_data[i]
            if '艺术形象' in poet_data[i]:
                result['艺术形象'] = poet_data[i]

            #
            # for j in range(len(poet_data)):
            #     if splitwords[i] in poet_data[j]:
            #         result[splitwords[i]] = poet_data[j]
        result_data.append(
            {'本名': result['本名'], '字': result['字'], '号': result['号'], '性别': '男', '出生时间': result['出生时间'],
             '去世时间': result['去世时间'], '所处时代': result['所处时代'], '人物简介': intro, '主要作品': result['主要作品'],
             '人物生平': result['人物生平'],
             '主要成就': result['主要成就'], '文学特点': result['文学特点'], '人物评价': result['人物评价'], '轶事典故': result['轶事典故'],
             '亲属成员': result['亲属成员'], '后世影响': result['后世影响'], '人物争议': result['人物争议'], '后世纪念': result['后世纪念'],
             '艺术形象': result['艺术形象']})
        print("完成" + poetname)
    fw = open('../../Downloads/poet_baike/all.json', 'w')
    fw.write(json.dumps(result_data, ensure_ascii=False))
    fw.close()
    print("任务完成")
